package cn.itcast.tools;

import cn.itcast.entity.FarmingRecord;
import cn.itcast.service.FarmingService;
import dev.langchain4j.agent.tool.P;
import dev.langchain4j.agent.tool.Tool;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class FarmingTools {
    @Autowired
    private FarmingService farmingService;
    
    @Tool(name = "添加养殖记录", value = "根据参数，先执行工具方法queryPool查询养殖池状态，并直接给用户回答是否可添加记录，并让用户确认所有记录信息，用户确认后再进行添加。")
    public String addFarmingRecord(FarmingRecord farmingRecord){
        //查找数据库中是否包含对应的记录
        FarmingRecord recordDB = farmingService.getOne(farmingRecord);
        if(recordDB == null){
            farmingRecord.setId(null);//防止大模型幻觉设置了id
            if(farmingService.save(farmingRecord)){
                return "养殖记录添加成功，并返回记录详情";
            }else{
                return "养殖记录添加失败";
            }
        }
        return "您在相同的养殖池和时间已有记录";
    }
    
    @Tool(name = "更新养殖记录", value = "根据参数，查询记录是否存在，如果存在则更新记录并返回更新成功，否则返回更新失败")
    public String updateFarmingRecord(FarmingRecord farmingRecord){
        FarmingRecord recordDB = farmingService.getOne(farmingRecord);

        if(recordDB != null){
            //更新记录
            if(farmingService.updateById(farmingRecord)){
                return "养殖记录更新成功";
            }else{
                return "养殖记录更新失败";
            }
        }
        //更新失败
        return "您没有找到对应的养殖记录，请核对养殖池和日期";
    }
    
    @Tool(name = "查询养殖池状态", value = "根据养殖池编号，日期和记录类型查询养殖池状态，并返回给用户")
    public boolean queryPool(
            @P(value = "养殖池编号") String poolNumber,
            @P(value = "日期") String date,
            @P(value = "记录类型，可选值：健康检查、喂食记录、水质检测") String recordType,
            @P(value = "斗鱼品种", required = false) String fishBreed
    ){
        System.out.println("查询养殖池状态");
        System.out.println("养殖池编号：" + poolNumber);
        System.out.println("日期：" + date);
        System.out.println("记录类型：" + recordType);
        System.out.println("斗鱼品种：" + fishBreed);
        //TODO 维护养殖池的状态信息：
        //如果没有指定斗鱼品种，则根据其他条件查询养殖池状态（正常返回true，否则返回false）；
        //如果指定了斗鱼品种，则判断该品种是否适合该养殖池（不适合返回false）
        //如果适合，则判断养殖池是否有足够空间（空间不足返回false，有空间返回true）
        return true;
    }
}